# 函数定义默认值参数
# 函数定义时，给形参设置默认值，只有默认值不符的时候才需要传递实参
def fun(a, b=10):
    print(a, b)


# 函数的调用
# 使用默认值
fun(12)
# 不使用默认值
fun(12, 32)
# print 也有默认值，不修改默认值，默认换行

# 函数参数定义
# 1.个数可变的位置参数
# * 定义个数可变的位置形参
# 结果为一个元组
# 2.个数可变的关键字形参
# 定义函数时，无法事先确定传递的关键字实参的个数，使用可变的关键字形参
# 使用** 定义个数可变的关键字形参
# 结果为一个字典


# 函数定义的时候，可变的位置参数
# 函数的参数可以传过来很多个
# 类似于go中的...
# 不过go中的...只能在最后一个参数上使用
def func(*a):
    print(a)


func(10, 20, 30)

# 函数定义的时候，关键字参数
# 结果为字典


def hell(**args):
    print(args)


hell(a=10, b=20, c=30)

# 个数可变的位置参数只能定义一个
# 可变的关键字参数只能定义一个

# 在一个函数的定义中，既有关键字参数，又有个数可变的位置形参
# 要求个数可变的位置形参放在个数可变的关键字形参之前
# 可变位参只能在可变关键字参数之前


def h1(*a, **b):
    pass  # pass跳过 类似于go当中的_


# def h2(**a,*b):
#     pass
